

<!DOCTYPE html>
<html lang="zh-CN" data-default-color-scheme=auto>



<head>
  <meta charset="UTF-8">
  <link rel="apple-touch-icon" sizes="76x76" href="/img/favicon.png">
  <link rel="icon" href="/img/favicon.png">
  <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=5.0, shrink-to-fit=no">
  <meta http-equiv="x-ua-compatible" content="ie=edge">
  
  <meta name="theme-color" content="#2f4154">
  <meta name="author" content="Cai Shibo">
  <meta name="keywords" content="cc">
  
    <meta name="description" content="数据响应方式1. 页面跳转  直接返回字符串此种方式会将返回的字符串与视图解析器的前后缀拼接后跳转。  通过ModelAndView对象返回Model：模型，用于封装数据View ：视图，用于展示数据   2. 回写数据  直接返回字符串 返回对象或集合    获得请求数据 客户端请求参数的格式：name &#x3D; value &amp; name &#x3D; value…   服务端获得请求的参数，有时需要进">
<meta property="og:type" content="article">
<meta property="og:title" content="SSM--D6">
<meta property="og:url" content="https://hahsx_xd.gitee.io/2022/04/25/SSM-D6/index.html">
<meta property="og:site_name" content="🍊CAI SHIBO🥬">
<meta property="og:description" content="数据响应方式1. 页面跳转  直接返回字符串此种方式会将返回的字符串与视图解析器的前后缀拼接后跳转。  通过ModelAndView对象返回Model：模型，用于封装数据View ：视图，用于展示数据   2. 回写数据  直接返回字符串 返回对象或集合    获得请求数据 客户端请求参数的格式：name &#x3D; value &amp; name &#x3D; value…   服务端获得请求的参数，有时需要进">
<meta property="og:locale" content="zh_CN">
<meta property="og:image" content="https://hahsx_xd.gitee.io/images/pasted-80.png">
<meta property="og:image" content="https://hahsx_xd.gitee.io/images/pasted-84.png">
<meta property="og:image" content="https://hahsx_xd.gitee.io/images/pasted-85.png">
<meta property="og:image" content="https://hahsx_xd.gitee.io/images/pasted-86.png">
<meta property="og:image" content="https://hahsx_xd.gitee.io/images/pasted-87.png">
<meta property="og:image" content="https://hahsx_xd.gitee.io/images/pasted-88.png">
<meta property="og:image" content="https://hahsx_xd.gitee.io/images/pasted-89.png">
<meta property="og:image" content="https://hahsx_xd.gitee.io/images/pasted-90.png">
<meta property="og:image" content="https://hahsx_xd.gitee.io/images/pasted-92.png">
<meta property="og:image" content="https://hahsx_xd.gitee.io/images/pasted-93.png">
<meta property="og:image" content="https://hahsx_xd.gitee.io/images/pasted-94.png">
<meta property="og:image" content="https://hahsx_xd.gitee.io/images/pasted-95.png">
<meta property="og:image" content="https://hahsx_xd.gitee.io/images/pasted-96.png">
<meta property="og:image" content="https://hahsx_xd.gitee.io/images/pasted-98.png">
<meta property="og:image" content="https://hahsx_xd.gitee.io/images/pasted-99.png">
<meta property="og:image" content="https://hahsx_xd.gitee.io/images/pasted-100.png">
<meta property="og:image" content="https://hahsx_xd.gitee.io/images/pasted-101.png">
<meta property="og:image" content="https://hahsx_xd.gitee.io/images/pasted-102.png">
<meta property="og:image" content="https://hahsx_xd.gitee.io/images/pasted-103.png">
<meta property="og:image" content="https://hahsx_xd.gitee.io/images/pasted-104.png">
<meta property="og:image" content="https://hahsx_xd.gitee.io/images/pasted-105.png">
<meta property="article:published_time" content="2022-04-25T01:55:00.000Z">
<meta property="article:modified_time" content="2022-11-29T07:14:46.501Z">
<meta property="article:author" content="Cai Shibo">
<meta property="article:tag" content="SpringMVC">
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:image" content="https://hahsx_xd.gitee.io/images/pasted-80.png">
  
  
  <title>SSM--D6 - 🍊CAI SHIBO🥬</title>

  <link  rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4/dist/css/bootstrap.min.css" />


  <link  rel="stylesheet" href="https://cdn.jsdelivr.net/npm/github-markdown-css@4/github-markdown.min.css" />
  <link  rel="stylesheet" href="https://cdn.jsdelivr.net/npm/hint.css@2/hint.min.css" />

  
    
    
      
      <link  rel="stylesheet" href="https://cdn.jsdelivr.net/npm/highlight.js@10/styles/github-gist.min.css" />
    
  

  
    <link  rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@fancyapps/fancybox@3/dist/jquery.fancybox.min.css" />
  


<!-- 主题依赖的图标库，不要自行修改 -->

<link rel="stylesheet" href="//at.alicdn.com/t/font_1749284_ba1fz6golrf.css">



<link rel="stylesheet" href="//at.alicdn.com/t/font_1736178_lbnruvf0jn.css">


<link  rel="stylesheet" href="/css/main.css" />

<!-- 自定义样式保持在最底部 -->


  <script id="fluid-configs">
    var Fluid = window.Fluid || {};
    var CONFIG = {"hostname":"hahsx_xd.gitee.io","root":"/","version":"1.8.14","typing":{"enable":true,"typeSpeed":70,"cursorChar":".|","loop":false},"anchorjs":{"enable":true,"element":"h1,h2,h3,h4,h5,h6","placement":"right","visible":"hover","icon":"#"},"progressbar":{"enable":true,"height_px":3,"color":"#29d","options":{"showSpinner":false,"trickleSpeed":100}},"copy_btn":true,"image_zoom":{"enable":true,"img_url_replace":["",""]},"toc":{"enable":true,"headingSelector":"h1,h2,h3,h4,h5,h6","collapseDepth":5},"lazyload":{"enable":true,"loading_img":"/img/loading.gif","onlypost":true,"offset_factor":2},"web_analytics":{"enable":false,"baidu":null,"google":null,"gtag":null,"tencent":{"sid":null,"cid":null},"woyaola":null,"cnzz":null,"leancloud":{"app_id":null,"app_key":null,"server_url":null,"path":"window.location.pathname","ignore_local":false}},"search_path":"/local-search.xml"};
  </script>
  <script  src="/js/utils.js" ></script>
  <script  src="/js/color-schema.js" ></script>
<meta name="generator" content="Hexo 5.4.0"><link rel="alternate" href="/atom.xml" title="🍊CAI SHIBO🥬" type="application/atom+xml">
</head>


<body>
  <header style="height: 70vh;">
    <nav id="navbar" class="navbar fixed-top  navbar-expand-lg navbar-dark scrolling-navbar">
  <div class="container">
    <a class="navbar-brand" href="/">
      <strong>^_^ 🥬 CC</strong>
    </a>

    <button id="navbar-toggler-btn" class="navbar-toggler" type="button" data-toggle="collapse"
            data-target="#navbarSupportedContent"
            aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
      <div class="animated-icon"><span></span><span></span><span></span></div>
    </button>

    <!-- Collapsible content -->
    <div class="collapse navbar-collapse" id="navbarSupportedContent">
      <ul class="navbar-nav ml-auto text-center">
        
          
          
          
          
            <li class="nav-item">
              <a class="nav-link" href="/">
                <i class="iconfont icon-home-fill"></i>
                首页
              </a>
            </li>
          
        
          
          
          
          
            <li class="nav-item">
              <a class="nav-link" href="/archives/">
                <i class="iconfont icon-archive-fill"></i>
                归档
              </a>
            </li>
          
        
          
          
          
          
            <li class="nav-item">
              <a class="nav-link" href="/categories/">
                <i class="iconfont icon-category-fill"></i>
                分类
              </a>
            </li>
          
        
          
          
          
          
            <li class="nav-item">
              <a class="nav-link" href="/tags/">
                <i class="iconfont icon-tags-fill"></i>
                标签
              </a>
            </li>
          
        
          
          
          
          
            <li class="nav-item">
              <a class="nav-link" href="/about/">
                <i class="iconfont icon-user-fill"></i>
                关于
              </a>
            </li>
          
        
        
          <li class="nav-item" id="search-btn">
            <a class="nav-link" target="_self" href="javascript:;" data-toggle="modal" data-target="#modalSearch" aria-label="Search">
              &nbsp;<i class="iconfont icon-search"></i>&nbsp;
            </a>
          </li>
        
        
          <li class="nav-item" id="color-toggle-btn">
            <a class="nav-link" target="_self" href="javascript:;" aria-label="Color Toggle">&nbsp;<i
                class="iconfont icon-dark" id="color-toggle-icon"></i>&nbsp;</a>
          </li>
        
      </ul>
    </div>
  </div>
</nav>

    <div class="banner" id="banner" parallax=true
         style="background: url('/img/default.png') no-repeat center center;
           background-size: cover;">
      <div class="full-bg-img">
        <div class="mask flex-center" style="background-color: rgba(0, 0, 0, 0.3)">
          <div class="page-header text-center fade-in-up">
            <span class="h2" id="subtitle" title="SSM--D6">
              
            </span>

            
              <div class="mt-3">
  
    <span class="post-meta mr-2">
      <i class="iconfont icon-author" aria-hidden="true"></i>
      Cai Shibo
    </span>
  
  
    <span class="post-meta">
      <i class="iconfont icon-date-fill" aria-hidden="true"></i>
      <time datetime="2022-04-25 09:55" pubdate>
        2022年4月25日 上午
      </time>
    </span>
  
</div>

<div class="mt-1">
  
    <span class="post-meta mr-2">
      <i class="iconfont icon-chart"></i>
      2.8k 字
    </span>
  

  
    <span class="post-meta mr-2">
      <i class="iconfont icon-clock-fill"></i>
      
      
      14 分钟
    </span>
  

  
  
    
      <!-- 不蒜子统计文章PV -->
      <span id="busuanzi_container_page_pv" style="display: none">
        <i class="iconfont icon-eye" aria-hidden="true"></i>
        <span id="busuanzi_value_page_pv"></span> 次
      </span>
    
  
</div>

            
          </div>

          
        </div>
      </div>
    </div>
  </header>

  <main>
    
      

<div class="container-fluid nopadding-x">
  <div class="row nomargin-x">
    <div class="d-none d-lg-block col-lg-2"></div>
    <div class="col-lg-8 nopadding-x-md">
      <div class="container nopadding-x-md" id="board-ctn">
        <div class="py-5" id="board">
          <article class="post-content mx-auto">
            <!-- SEO header -->
            <h1 style="display: none">SSM--D6</h1>
            
              <p class="note note-info">
                
                  最后更新：23 天前
                
              </p>
            
            <div class="markdown-body">
              <h3 id="数据响应方式"><a href="#数据响应方式" class="headerlink" title="数据响应方式"></a>数据响应方式</h3><p><strong>1. 页面跳转</strong></p>
<ul>
<li><p>直接返回字符串<br>此种方式会将返回的字符串与视图解析器的前后缀拼接后跳转。<br><img src="/images/pasted-80.png" srcset="/img/loading.gif" lazyload></p>
</li>
<li><p>通过ModelAndView对象返回<br>Model：模型，用于封装数据<br>View ：视图，用于展示数据<br><img src="/images/pasted-84.png" srcset="/img/loading.gif" lazyload alt="方法小结"></p>
</li>
</ul>
<p><strong>2. 回写数据</strong></p>
<ul>
<li>直接返回字符串</li>
<li>返回对象或集合</li>
</ul>
<p><img src="/images/pasted-85.png" srcset="/img/loading.gif" lazyload></p>
<hr>
<h3 id="获得请求数据"><a href="#获得请求数据" class="headerlink" title="获得请求数据"></a>获得请求数据</h3><ul>
<li>客户端请求参数的格式：name = value &amp; name = value…  </li>
<li>服务端获得请求的参数，有时需要进行<strong>数据的封装</strong>，SpringMVC接受如下类型的参数：<ul>
<li>基本类型参数 </li>
<li>POJO 类型参数（MVC可直接进行封装）</li>
<li>数组类型参数</li>
<li>集合类型参数</li>
</ul>
</li>
</ul>
<ol>
<li><p>获得基本类型参数<br><img src="/images/pasted-86.png" srcset="/img/loading.gif" lazyload><br>注意：数据类型需要匹配，可以转换的会做自动转换，属性名和请求参数名可以不一致。</p>
</li>
<li><p>获得POJO 类型参数<br><img src="/images/pasted-87.png" srcset="/img/loading.gif" lazyload><br>请求参数名要与实体的属性名一致，本质是封装 beanutil 调用实体的 set 方法。</p>
</li>
<li><p>获得数组类型参数<br><img src="/images/pasted-88.png" srcset="/img/loading.gif" lazyload><br>数组名称与请求参数名一致，参数只会自动映射匹配。</p>
</li>
<li><p>获得集合类型参数</p>
<ul>
<li><p>封装到 VO 中<br><img src="/images/pasted-89.png" srcset="/img/loading.gif" lazyload><br>获取集合参数时，要将集合参数包装到一个 POJO 中才可以。</p>
</li>
<li><p>使用 ajax 提交时，可指定 contentType 为 json 形式，那么在方法参数位置使用 @RequestBody 可直接接收集合数据而无需使用POJO进行包装。<br><img src="/images/pasted-90.png" srcset="/img/loading.gif" lazyload></p>
</li>
</ul>
<p> <strong>遇到的问题</strong><br> 找不到JQuery文件，原因是SpringMVC前端控制器未配置对应内容，在目标内找不到对应资源，因此访问不到。<br> <strong>解决方案：</strong><br> 1、在spring.xml 中配置开放资源。（mapping 是地址，location 是目录）  </p>
 <figure class="highlight xml"><table><tr><td class="gutter hljs"><div class="hljs code-wrapper"><pre><span class="line">1</span><br></pre></div></td><td class="code"><div class="hljs code-wrapper"><pre><code class="hljs xml"><span class="hljs-tag">&lt;<span class="hljs-name">mvc:resources</span> <span class="hljs-attr">mapping</span>=<span class="hljs-string">&quot;/js/**&quot;</span> <span class="hljs-attr">location</span>=<span class="hljs-string">&quot;/js/&quot;</span>/&gt;</span><br></code></pre></div></td></tr></table></figure>
<p> 2、访问资源时如果前段控制器找不到资源，就交给原始容器（tomcat）寻找资源  </p>
 <figure class="highlight xml"><table><tr><td class="gutter hljs"><div class="hljs code-wrapper"><pre><span class="line">1</span><br></pre></div></td><td class="code"><div class="hljs code-wrapper"><pre><code class="hljs xml"><span class="hljs-tag">&lt;<span class="hljs-name">mvc:default-servlet-handler</span>/&gt;</span><br></code></pre></div></td></tr></table></figure>
</li>
</ol>
<hr>
<h4 id="请求乱码问题"><a href="#请求乱码问题" class="headerlink" title="请求乱码问题"></a>请求乱码问题</h4><p>请求参数含有中文会出现乱码问题（Tomcat 8 POST 请求方式会出现，GET 不出现），在 web.xml 中配置全局 filter 过滤器，实现 utf-8 编码格式。<br><img src="/images/pasted-92.png" srcset="/img/loading.gif" lazyload></p>
<h4 id="参数绑定"><a href="#参数绑定" class="headerlink" title="参数绑定"></a>参数绑定</h4><p>当请求参数名称与 Controller 的业务方法参数名称不一致时，会出现获取参数为 null 的情况，需通过 <strong>@RequestParam</strong> 注解显示绑定。<br><img src="/images/pasted-93.png" srcset="/img/loading.gif" lazyload></p>
<p>@RequestParam ()</p>
<ul>
<li>value：与请求参数绑定的名称（默认缺省）</li>
<li>required：在请求中该参数是否必须包括（默认为 true，提交请求时不包含该参数会报错；改为 false，不包含该参数时值为 null，不报错）</li>
<li>defaultValue：在没有请求参数时，用默认值代替</li>
</ul>
<h4 id="获得-Restful-风格的参数"><a href="#获得-Restful-风格的参数" class="headerlink" title="获得 Restful 风格的参数"></a>获得 Restful 风格的参数</h4><p>介绍：<br><img src="/images/pasted-94.png" srcset="/img/loading.gif" lazyload></p>
<p>代码实现：<br><img src="/images/pasted-95.png" srcset="/img/loading.gif" lazyload><br>在 @RequestMapping 中对请求方式 method 加以限制，实现不同请求方式完成不同操作的目的。</p>
<h4 id="自定义类型转换器"><a href="#自定义类型转换器" class="headerlink" title="自定义类型转换器"></a>自定义类型转换器</h4><ul>
<li>SpringMVC 默认提供了常用的类型转换器，例如客户端提交的字符串转换成 int 型进行参数设置。</li>
<li>未提供类型转换器的就需要自定义，例如日期类型的数据。</li>
</ul>
<p>以日期转换器为例：</p>
<ol>
<li><p>定义转换器类实现 Converter 接口<br><img src="/images/pasted-96.png" srcset="/img/loading.gif" lazyload></p>
</li>
<li><p>在配置文件中声明转换器（图见步骤 3 下）</p>
</li>
<li><p>在 <annotation-driven> 中引用转换器<br><img src="/images/pasted-98.png" srcset="/img/loading.gif" lazyload></p>
</li>
</ol>
<h4 id="获得-Servlet-相关-API"><a href="#获得-Servlet-相关-API" class="headerlink" title="获得 Servlet 相关 API"></a>获得 Servlet 相关 API</h4><p>SpringMVC 支持使用原始 ServletAPI 对象作为控制器方法的参数进行注入，常用的对象如下：  </p>
<ul>
<li>HttpServletRequest</li>
<li>HttpServletResponse</li>
<li>HttpSession</li>
</ul>
<figure class="highlight java"><table><tr><td class="gutter hljs"><div class="hljs code-wrapper"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></div></td><td class="code"><div class="hljs code-wrapper"><pre><code class="hljs java"><span class="hljs-meta">@RequestMapping(&quot;/getservlet&quot;)</span><br><span class="hljs-meta">@ResponseBody</span><br><span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">getservlet</span><span class="hljs-params">(HttpServletRequest request, HttpServletResponse response, HttpSession session)</span> </span>&#123;<br>    System.out.println(request);<br>    System.out.println(response);<br>    System.out.println(session);<br>&#125;<br></code></pre></div></td></tr></table></figure>

<h4 id="获得请求头"><a href="#获得请求头" class="headerlink" title="获得请求头"></a>获得请求头</h4><ol>
<li>@RequestHeader<ul>
<li>value：请求头名称</li>
<li>required：是否必须携带此请求头</li>
</ul>
</li>
</ol>
  <figure class="highlight java"><table><tr><td class="gutter hljs"><div class="hljs code-wrapper"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></div></td><td class="code"><div class="hljs code-wrapper"><pre><code class="hljs java"><span class="hljs-meta">@RequestMapping(&quot;/getrequestheader&quot;)</span><br><span class="hljs-meta">@ResponseBody</span><br><span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">getrequestheader</span><span class="hljs-params">(<span class="hljs-meta">@RequestHeader(value = &quot;User-Agent&quot;, required = false)</span> String user_agent)</span> </span>&#123;<br>    System.out.println(user_agent);<br>&#125;<br></code></pre></div></td></tr></table></figure>

<ol start="2">
<li>@CookieValue<ul>
<li>value：cookie 名称</li>
<li>required：是否必须携带此 cookie</li>
</ul>
</li>
</ol>
  <figure class="highlight java"><table><tr><td class="gutter hljs"><div class="hljs code-wrapper"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></div></td><td class="code"><div class="hljs code-wrapper"><pre><code class="hljs java"><span class="hljs-meta">@RequestMapping(&quot;/getcookie&quot;)</span><br><span class="hljs-meta">@ResponseBody</span><br><span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">getcookie</span><span class="hljs-params">(<span class="hljs-meta">@CookieValue(value = &quot;JSESSIONID&quot;, required = false)</span> String cookie)</span> </span>&#123;<br>    System.out.println(cookie);<br>&#125;<br></code></pre></div></td></tr></table></figure>

<p><strong>不同：</strong>@RequestHeader ( value = “Cookie” ) 拿到形如 “JSESSIONID=XXXXX” 的 cookie 键值，@CookieValue ( value = “JSESSIONID” ) 可直接拿到 “XXXX” 的cookie 值。</p>
<h4 id="文件上传"><a href="#文件上传" class="headerlink" title="文件上传"></a>文件上传</h4><ol>
<li>文件上传客户端三要素：<ul>
<li>表单项 type = “file”</li>
<li>表单的提交方式是 post</li>
<li>表单的 enctype 属性是多部分表单形式，即 enctype = “multipart/form-data”</li>
</ul>
</li>
</ol>
<p> <img src="/images/pasted-99.png" srcset="/img/loading.gif" lazyload></p>
<ol start="2">
<li>文件上传原理<br><img src="/images/pasted-100.png" srcset="/img/loading.gif" lazyload></li>
</ol>
<h5 id="单文件上传"><a href="#单文件上传" class="headerlink" title="单文件上传"></a>单文件上传</h5><p>步骤：</p>
<ol>
<li><p>导入 fileupload 和 io 坐标<br><img src="/images/pasted-101.png" srcset="/img/loading.gif" lazyload></p>
</li>
<li><p>配置文件上传解析器<br><img src="/images/pasted-102.png" srcset="/img/loading.gif" lazyload></p>
</li>
<li><p>编写文件上传、获取代码<br><img src="/images/pasted-103.png" srcset="/img/loading.gif" lazyload></p>
</li>
</ol>
<p>文件获取、存储</p>
<figure class="highlight java"><table><tr><td class="gutter hljs"><div class="hljs code-wrapper"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></div></td><td class="code"><div class="hljs code-wrapper"><pre><code class="hljs java"><span class="hljs-meta">@RequestMapping(&quot;/uploadfile&quot;)</span><br><span class="hljs-meta">@ResponseBody</span><br><span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">uploadfile</span><span class="hljs-params">(String username, MultipartFile upload)</span> <span class="hljs-keyword">throws</span> Exception</span>&#123;<br>    System.out.println(username);<br>    System.out.println(upload);<br><br>    <span class="hljs-comment">//获得上传文件的名称</span><br>    String originalFilename = upload.getOriginalFilename();<br>    <span class="hljs-comment">//上传文件</span><br>    upload.transferTo(<span class="hljs-keyword">new</span> File(<span class="hljs-string">&quot;/Users/purewhite/Downloads/upload/&quot;</span> + originalFilename));<br>&#125;<br></code></pre></div></td></tr></table></figure>

<h5 id="多文件上传"><a href="#多文件上传" class="headerlink" title="多文件上传"></a>多文件上传</h5><ul>
<li><p>文件名不同<br><img src="/images/pasted-104.png" srcset="/img/loading.gif" lazyload></p>
</li>
<li><p>文件名相同，使用数组<br><img src="/images/pasted-105.png" srcset="/img/loading.gif" lazyload></p>
</li>
</ul>

            </div>
            <hr>
            <div>
              <div class="post-metas mb-3">
                
                  <div class="post-meta mr-3">
                    <i class="iconfont icon-category"></i>
                    
                      <a class="hover-with-bg" href="/categories/%E6%A1%86%E6%9E%B6%E5%AD%A6%E4%B9%A0/">框架学习</a>
                    
                  </div>
                
                
                  <div class="post-meta">
                    <i class="iconfont icon-tags"></i>
                    
                      <a class="hover-with-bg" href="/tags/SpringMVC/">SpringMVC</a>
                    
                  </div>
                
              </div>
              
                <p class="note note-warning">
                  
                    本博客所有文章未经允许，严禁转载！
                  
                </p>
              
              
                <div class="post-prevnext">
                  <article class="post-prev col-6">
                    
                    
                      <a href="/2022/04/28/SSM-D7/">
                        <i class="iconfont icon-arrowleft"></i>
                        <span class="hidden-mobile">SSM--D7</span>
                        <span class="visible-mobile">上一篇</span>
                      </a>
                    
                  </article>
                  <article class="post-next col-6">
                    
                    
                      <a href="/2022/04/10/%E7%AE%97%E6%B3%95-%E9%93%BE%E8%A1%A8/">
                        <span class="hidden-mobile">算法--链表</span>
                        <span class="visible-mobile">下一篇</span>
                        <i class="iconfont icon-arrowright"></i>
                      </a>
                    
                  </article>
                </div>
              
            </div>

            
          </article>
        </div>
      </div>
    </div>
    
      <div class="d-none d-lg-block col-lg-2 toc-container" id="toc-ctn">
        <div id="toc">
  <p class="toc-header"><i class="iconfont icon-list"></i>&nbsp;目录</p>
  <div class="toc-body" id="toc-body"></div>
</div>

      </div>
    
  </div>
</div>

<!-- Custom -->


    

    
      <a id="scroll-top-button" aria-label="TOP" href="#" role="button">
        <i class="iconfont icon-arrowup" aria-hidden="true"></i>
      </a>
    

    
      <div class="modal fade" id="modalSearch" tabindex="-1" role="dialog" aria-labelledby="ModalLabel"
     aria-hidden="true">
  <div class="modal-dialog modal-dialog-scrollable modal-lg" role="document">
    <div class="modal-content">
      <div class="modal-header text-center">
        <h4 class="modal-title w-100 font-weight-bold">搜索</h4>
        <button type="button" id="local-search-close" class="close" data-dismiss="modal" aria-label="Close">
          <span aria-hidden="true">&times;</span>
        </button>
      </div>
      <div class="modal-body mx-3">
        <div class="md-form mb-5">
          <input type="text" id="local-search-input" class="form-control validate">
          <label data-error="x" data-success="v"
                 for="local-search-input">关键词</label>
        </div>
        <div class="list-group" id="local-search-result"></div>
      </div>
    </div>
  </div>
</div>
    

    
  </main>

  <footer class="text-center mt-5 py-3">
  <div class="footer-content">
     CC <i class="iconfont icon-love"></i> XX
  </div>
  
  <div class="statistics">
    
    

    
      
        <!-- 不蒜子统计PV -->
        <span id="busuanzi_container_site_pv" style="display: none">
            总访问量 
            <span id="busuanzi_value_site_pv"></span>
             次
          </span>
      
      
        <!-- 不蒜子统计UV -->
        <span id="busuanzi_container_site_uv" style="display: none">
            总访客数 
            <span id="busuanzi_value_site_uv"></span>
             人
          </span>
      
    
  </div>


  

  
</footer>


  <!-- SCRIPTS -->
  
  <script  src="https://cdn.jsdelivr.net/npm/nprogress@0/nprogress.min.js" ></script>
  <link  rel="stylesheet" href="https://cdn.jsdelivr.net/npm/nprogress@0/nprogress.min.css" />

  <script>
    NProgress.configure({"showSpinner":false,"trickleSpeed":100})
    NProgress.start()
    window.addEventListener('load', function() {
      NProgress.done();
    })
  </script>


<script  src="https://cdn.jsdelivr.net/npm/jquery@3/dist/jquery.min.js" ></script>
<script  src="https://cdn.jsdelivr.net/npm/bootstrap@4/dist/js/bootstrap.min.js" ></script>
<script  src="/js/events.js" ></script>
<script  src="/js/plugins.js" ></script>

<!-- Plugins -->


  <script  src="/js/local-search.js" ></script>



  
    
      <script  src="/js/img-lazyload.js" ></script>
    
  



  



  
    <script  src="https://cdn.jsdelivr.net/npm/tocbot@4/dist/tocbot.min.js" ></script>
  
  
    <script  src="https://cdn.jsdelivr.net/npm/@fancyapps/fancybox@3/dist/jquery.fancybox.min.js" ></script>
  
  
    <script  src="https://cdn.jsdelivr.net/npm/anchor-js@4/anchor.min.js" ></script>
  
  
    <script defer src="https://cdn.jsdelivr.net/npm/clipboard@2/dist/clipboard.min.js" ></script>
  



  <script defer src="https://busuanzi.ibruce.info/busuanzi/2.3/busuanzi.pure.mini.js" ></script>




  <script  src="https://cdn.jsdelivr.net/npm/typed.js@2/lib/typed.min.js" ></script>
  <script>
    (function (window, document) {
      var typing = Fluid.plugins.typing;
      var title = document.getElementById('subtitle').title;
      
        typing(title);
      
    })(window, document);
  </script>















<!-- 主题的启动项 保持在最底部 -->
<script  src="/js/boot.js" ></script>


</body>
</html>
